package dac;

public class hanoitower {
    public static void main(String[] args) {
        hanoitower(10,'A','B','C');
    }
/*
------------|-------------|-------------|------
------------|-------------|-------------|------
------------|-------------|-------------|------
--------____|____-----____|____-----____|___---
------------A-------------B-------------C------
 */

    /**
     * 汉诺塔
     * @param num  需要做操作的盘  1  2  3 表示第几个盘
     * @param a    需要移动的盘
     * @param b    移动过程中需要借助的塔
     * @param c    需要移动到的塔
     */
    public static void hanoitower(int num,char a,char b,char c){
        if(num==1){
            System.out.println("第"+num+"个，从"+a+"->"+c);
        }else{
            //如果我们有num>=2个，则分治，我们总可以将他们
            //看作两个盘 1最底下一个盘，2上面所有盘
            //1.先把上面所有盘先移到A->B塔上,借助C塔
            hanoitower(num-1,a,c,b);
            //2.将最下面的盘从A->C
            System.out.println("第"+num+"个，从"+a+"->"+c);
            //3.将B塔所有盘从B->C，借助A塔
            hanoitower(num-1,b,a,c);
        }
    }
}
